package com.closer.server.biz.problem.service;

import com.closer.server.biz.problem.dto.*;
import com.closer.server.biz.problem.dto.vo.AdminProblemVO;
import com.closer.server.biz.problem.dto.vo.ProblemVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.closer.server.biz.problem.entity.Problem;

import java.util.List;

/**
 * 题目表 服务层。
 *
 * @author closer
 */
public interface ProblemService extends IService<Problem> {

    /**
     * [管理员]添加题目
     *
     * @param params 添加参数
     * @return 添加的题目 id
     */
    long add(AddRequest params);

    /**
     * [管理员]删除题目
     *
     * @param id 要删除的题目 id
     * @return 删除结果
     */
    boolean delete(Long id);

    /**
     * [管理员]修改题目
     *
     * @param params 修改参数
     * @return 修改结果
     */
    boolean updateProblem(UpdateRequest params);

    /**
     * 搜索题目
     *
     * @param params 搜索参数
     * @return 搜索结果
     */
    Page<ProblemVO> search(SearchRequest params);

    /**
     * [管理员]搜索题目
     * @param params 搜索参数
     * @return 搜索结果
     */
    Page<AdminProblemVO> adminSearch(SearchByAdminRequest params);

    /**
     * 提交题目
     * @param params 提交参数
     * @return 提交结果
     */
    long doProblem(SubmitRequest params);

    /**
     * 获取题目测试用例
     * @param id 要获取的题目 id
     * @return 用例列表
     */
    List<JudgeCase> getCase(Long id);

    ProblemVO get(Long id);
}
